package com.htbb.common.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/* *
 *类名：UtilDate
 *功能：自定义订单类
 *详细：工具类，可以用作获取系统日期、订单编号等
 *版本：3.3
 *日期：2012-08-17
 *说明：
 *以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
 */
public class UtilDate {

	/** 人保账户安全宝需要yyyyMMddhhmmssyyy格式 */
	public static final String dtLongX = "yyyyMMddhhmmssyyy";
	/** 年月日时分秒(无下划线) yyyyMMddHHmmss */
	public static final String dtLong = "yyyyMMddHHmmss";

	/** 完整时间 yyyy-MM-dd HH:mm:ss */
	public static final String simple = "yyyy-MM-dd HH:mm:ss";

	/** 年月日(无下划线) yyyyMMdd */
	public static final String dtShort = "yyyyMMdd";

	/** 年月日(有下划线) yyyyMMdd */
	public static final String _dtShort = "yyyy-MM-dd";

	/** 太平洋保险日期格式 **/
	public static final String tbShort = "yyyyMMddhh";

	static Logger logger = LoggerFactory.getLogger(UtilDate.class);
	
	
	/**
	 * 判断时间是否在明天之后
	 * @param isuStartDate 起保时间字符串
	 * @return
	 * @throws ParseException
	 */
	public static final boolean isuStartDateCheck(String isuStartDate) throws ParseException {
		
		SimpleDateFormat sf = new SimpleDateFormat(simple);
		Date satrt;
		satrt = sf.parse(isuStartDate);
		Calendar tomorrow = Calendar.getInstance();
		Calendar current = Calendar.getInstance();
		Calendar isuStart = Calendar.getInstance();
		isuStart.setTime(satrt);
		tomorrow.set(Calendar.YEAR, current.get(Calendar.YEAR));
		tomorrow.set(Calendar.MONTH, current.get(Calendar.MONTH));
		tomorrow.set(Calendar.DAY_OF_MONTH,current.get(Calendar.DAY_OF_MONTH));
		tomorrow.set( Calendar.HOUR_OF_DAY, 23);
		tomorrow.set( Calendar.MINUTE, 59);
		tomorrow.set(Calendar.SECOND, 59);
		if(isuStart.after(tomorrow)){
			return true;
		}
		
		return false;
	}
	
	/**
	 * 提供yyyyMMddhhmmssyyy格式的时间字符串
	 * 
	 * @return
	 */
	public static String getUUIDDateString() {
		Date date = new Date();
		DateFormat df = new SimpleDateFormat(dtLongX);
		return df.format(date);
	}

	/**
	 * 返回系统当前时间(精确到毫秒),作为一个唯一的订单编号
	 * 
	 * @return 以yyyyMMddHHmmss为格式的当前系统时间
	 */
	public static String getOrderNum() {
		Date date = new Date();
		DateFormat df = new SimpleDateFormat(dtLong);
		return df.format(date);
	}

	/**
	 * 获取系统当前日期(精确到毫秒)，格式：yyyy-MM-dd HH:mm:ss
	 * 
	 * @return
	 */
	public static String getDateFormatter() {
		Date date = new Date();
		DateFormat df = new SimpleDateFormat(simple);
		return df.format(date);
	}

	public static Date toDateFormatter(String dateString) {
		DateFormat df = new SimpleDateFormat(simple);
		try {
			return df.parse(dateString);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return new Date();
	}

	public static String getDateFormatter(Date date) {
		DateFormat df = new SimpleDateFormat(simple);
		return df.format(date);
	}

	/**
	 * 太保日期短格式
	 * 
	 * @param date
	 * @return
	 */
	public static String getTBDateFormatter(Date date) {
		DateFormat df = new SimpleDateFormat(tbShort);
		return df.format(date);
	}

	/**
	 * 获取yyyy-MM-dd格式的日期
	 * 
	 * @param date
	 * @return
	 */
	public static String getShortDateFormatter(Date date) {
		DateFormat df = new SimpleDateFormat(_dtShort);
		return df.format(date);
	}

	/**
	 * 获取系统当期年月日(精确到天)，格式：yyyyMMdd
	 * 
	 * @return
	 */
	public static String getDate() {
		Date date = new Date();
		DateFormat df = new SimpleDateFormat(dtShort);
		return df.format(date);
	}

	/**
	 * 产生随机的三位数
	 * 
	 * @return
	 */
	public static String getThree() {
		Random rad = new Random();
		return rad.nextInt(1000) + "";
	}

	// 天数加n
	public static String addDay(String date, int n) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(sdf.parse(date));
			calendar.add(Calendar.DATE, 1);
		} catch (ParseException e) {
			logger.error("parse date error." + e.getMessage());
		}
		return sdf.format(calendar.getTime());
	}

	// 转换日期为标准的yyyy-MM-dd格式
	public static String stringFormat(String string) {
		StringBuilder sb = new StringBuilder();
		String[] strings = string.split("-");
		if (strings.length != 3) {
			return "error:string length=" + string.length();
		}
		sb.append(strings[0] + "-");
		// 判断月份
		if (Integer.valueOf(strings[1]) < 10) {
			sb.append("0" + strings[1] + "-");
		} else {
			sb.append(strings[1] + "-");
		}
		// 判断日期
		if (Integer.valueOf(strings[2]) < 10) {
			sb.append("0" + strings[2]);
		} else {
			sb.append(strings[2]);
		}
		return sb.toString();
	}

	/**
	 * 根据格式类型返回对应日期
	 */
	public static String getFormatDateString(Date date, String format) {
		DateFormat sFormat = new SimpleDateFormat(format);
		return sFormat.format(date);
	}
}
